// 缓存实现 - 常驻内存缓存
/**
 * 常驻内存缓存工具类
 * 所有缓存数据将持久保存，不会自动过期
 */
class MemoryCache {
  constructor() {
    this.cache = new Map();
    // 常驻缓存不需要定时器
  }

  /**
   * 设置常驻缓存
   * @param {string} key - 缓存键
   * @param {any} value - 缓存值
   * @param {number} ttl - 保留参数（兼容性，但不会起作用）
   * @returns {boolean} - 是否设置成功
   */
  set(key, value, ttl = 0) {
    // 设置常驻缓存值
    this.cache.set(key, {
      value: value,
      timestamp: Date.now(),
      ttl: 0, // 常驻缓存，永不过期
    });

    return true;
  }

  /**
   * 获取常驻缓存
   * @param {string} key - 缓存键
   * @returns {any} - 缓存值，不存在返回null
   */
  get(key) {
    const item = this.cache.get(key);
    if (!item) {
      return null;
    }

    // 常驻缓存不检查过期，直接返回值
    return item.value;
  }

  /**
   * 删除缓存
   * @param {string} key - 缓存键
   * @returns {boolean} - 是否删除成功
   */
  delete(key) {
    return this.cache.delete(key);
  }

  /**
   * 清空所有缓存
   */
  clear() {
    this.cache.clear();
  }

  /**
   * 检查缓存是否存在
   * @param {string} key - 缓存键
   * @returns {boolean} - 是否存在
   */
  has(key) {
    return this.cache.has(key);
  }

  /**
   * 获取缓存大小
   * @returns {number} - 缓存条目数量
   */
  size() {
    return this.cache.size;
  }

  /**
   * 获取所有缓存键
   * @returns {string[]} - 缓存键数组
   */
  keys() {
    return Array.from(this.cache.keys());
  }

  /**
   * 获取所有缓存数据（含元信息）
   * @returns {object} - 所有缓存数据
   */
  getAllData() {
    const result = {};
    for (const [key, item] of this.cache.entries()) {
      result[key] = {
        value: item.value,
        timestamp: item.timestamp,
        ttl: item.ttl,
        isPermanent: true, // 常驻缓存标识
      };
    }
    return result;
  }
}

// 创建全局常驻缓存实例
const globalCache = new MemoryCache();

module.exports = {
  MemoryCache,
  globalCache,
};
